package com.xlh.virtualization.service;

import com.github.pagehelper.PageInfo;
import com.xlh.virtualization.domain.Image;
import com.xlh.virtualization.domain.ImageAttr;
import com.xlh.virtualization.po.ImageImportPO;
import com.xlh.vo.IconVO;
import com.xlh.virtualization.vo.ImageVO;

import java.util.List;

/**
 * @author cheer
 */
public interface ImageService {

    /**
     * 导入镜像
     *
     * @param imageImportPO 镜像导入参数
     */
    void importImage(ImageImportPO imageImportPO);

    /**
     * 删除镜像
     *
     * @param imageId 镜像Id
     */
    void deleteImage(Long imageId);

    /**
     * 批量删除镜像
     *
     * @param imageIds 镜像Id集合
     */
    void deleteImages(List<Long> imageIds);

    /**
     * 删除镜像
     *
     * @param contextType 场景类型
     * @param contextId   场景Id
     */
    void deleteImageByContext(Integer contextType, Long contextId);

    /**
     * 更新镜像信息
     *
     * @param imageId       镜像Id
     * @param imageImportPO 镜像信息更新参数
     */
    void updateImage(Long imageId, ImageImportPO imageImportPO, Boolean isSuperAdmin);

    /**
     * 查询镜像
     *
     * @param imageId      镜像Id
     * @param isSuperAdmin 是否为超级管理员
     * @return 镜像信息
     */
    ImageVO getImageById(Long imageId, Boolean isSuperAdmin);

    /**
     * 查询镜像图标
     *
     * @return 镜像图标列表
     */
    List<IconVO> listImageIcons();

    /**
     * 查询镜像
     *
     * @param imageIds 镜像Id集合
     * @return 镜像集合
     */
    List<Image> listImages(List<Long> imageIds);

    /**
     * 分页查询共享的镜像
     *
     * @param pageNum     第几页
     * @param pageSize    每页几条数据
     * @param imageSource 镜像来源
     * @return 镜像分页列表
     */
    PageInfo<ImageAttr> listSharedImagesByPage(Integer pageNum, Integer pageSize, Long imageSource);

    /**
     * 查询课程下创建的镜像列表
     *
     * @param courseId 课程Id
     * @return 镜像列表
     */
    List<ImageAttr> listImagesByCourseId(Long courseId);

    /**
     * 更新镜像共享状态
     *
     * @param contextType 场景类型
     * @param contextId   场景Id
     * @param shared      共享状态
     */
    void updateSharedStatusByContext(Integer contextType, Long contextId, Boolean shared);

    void check();
}
